package algorithm.leetcode.I1to100;

import java.util.Arrays;

/**
 * 基本思路和Q26一样,两个指针,赋值
 * 双指针在while循环的时候通常会遇到四种情况,分类讨论之后合并就可以
 */

public class Q27 {

    public int removeElement(int[] nums, int val) {
        int replaceIndex = -1;

        for (int i = 0; i < nums.length; i++) {
            // 这个if里条件记做A和B,第一个if表示 A&B
            // 之前没有等于val的,并且当前这个等于val,则标记开始赋值的位置,这一行只会执行一次
            if (nums[i] == val && replaceIndex == -1) replaceIndex = i;
            // !A & !B, 之前有等于val的,并且当前这个值不等于val,赋值,移动两个指针
            else if (nums[i] != val && replaceIndex != -1) nums[replaceIndex++] = nums[i];
            // 还有两种情况,i指针右移动就可以
            // A-B, 当前这个值等于val,且之前有等于val的,右移指针跳过这个数字
            // B-A, 之前无等于val的,当前这个值不等于val,右移指针找到第一个等于val的
        }
        return replaceIndex == -1 ? nums.length : replaceIndex;
    }

    public static void main(String[] args) {
        Q27 q27 = new Q27();
        int[] a = {};
        q27.removeElement(a, 2);
        System.out.println(Arrays.toString(a));
    }
}
